package com.example.myletcodelearing.one

import java.util.*
import kotlin.collections.HashMap
import kotlin.math.abs


/**
 * @author tgw
 * @date 2022/11/7
 * https://leetcode.cn/contest/weekly-contest-314/problems/find-the-original-array-of-prefix-xor/
2433. 找出前缀异或的原始数组 显示英文描述
通过的用户数3207
尝试过的用户数3335
用户总通过次数3259
用户总提交次数4032
题目难度Medium
给你一个长度为 n 的 整数 数组 pref 。找出并返回满足下述条件且长度为 n 的数组 arr ：

pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i].
注意 ^ 表示 按位异或（bitwise-xor）运算。

可以证明答案是 唯一 的。



示例 1：

输入：pref = [5,2,0,3,1]
输出：[5,7,2,3,2]
解释：从数组 [5,7,2,3,2] 可以得到如下结果：
- pref[0] = 5  ---- 0 ^ 5 = 5
- pref[1] = 5 ^ 7 = 2    ---- 5 ^ 7 = 2
- pref[2] = 5 ^ 7 ^ 2 = 0  ---- 2 ^ 2 = 0 （（上一次异或的值） 异或（需要求的为x的某个值） = （当前下标的值） ）
- pref[3] = 5 ^ 7 ^ 2 ^ 3 = 3 ---- 0 ^ 3 = 3
- pref[4] = 5 ^ 7 ^ 2 ^ 3 ^ 2 = 1  ---- 3 ^ 2 = 1

 ----是观察的结果 上一次异或的值--异或（x某个值） = 当前下标的值
以第二个下标为例：又因为 计算公式推导出： (5 ^ （x为7） = 2) =  (5 ^ 2 = x（计算出x为7）)

通过观察得出 i=0的时候就是当前值，i>0的话  x= pref【i-1】异或 pref【i】
 */

fun main(args: Array<String>) {
    var op = Solution17.Solution()
    var nums1 = arrayOf(5, 2, 0, 3, 1)
    var result = op.findArray(nums1)
    result.forEach {
        print("打印：$it")
    }
}

private class Solution17 {
    class Solution {
        fun findArray(pref: Array<Int>): IntArray {
            var result = IntArray(pref.size)
            result[0] = pref[0]
            for (i in 1 until result.size) {
                result[i] = pref[i - 1] xor pref[i]
            }

            return result
        }
    }

}
